package com.tedu.api.list;

import org.junit.Test;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**链表实现集合  包位置：java.util
 * ArrayList 实现类：数组实现
 *             特点：查询块【按照下标】、增删慢【改动下标：元素】
 * LinkedList  实现类：数组实现
 *             特点：查询慢【按照下标】、增删块【首、尾元素、中间元素】
 * ArrayList与LinkedList大部分方法完全一致
 * 添加 add()  获取 get() 删除 remove()
 * size() 获取集合总数 clear()清空集合元素
 *
 * 不一致的方法：
 * index() lastIndexOf
 * addFirst()
 * addLast()
 * removeFirst()
 * removeLast()
 */
public class LinkedListApi {
    @Test
    public void testIndexOf() {
        //创建集合--双向链接集合
        List<String> list = new ArrayList<>();
        list.add("三吱");
        list.add("龙虎斗");
        list.add("螺狮粉");
        list.add("庵汤");
        /**ArrayList与LinkList通用方法
         * indexOf()   返回值：int
         * 作用：返回指定怨怒在集合中第一次出现的索引位置
         *     【理解：返回元素的下标位】
         */
        int index = list.indexOf("庵汤");
        /**
         * LinkedList独有方法
         * LastIndexOf()  返回值：int
         * 作用：返回最后的元素在集合中出现的索引位置
         */
        int lastIndex = list.lastIndexOf("庵汤");
        System.out.println("返回最后元素的下标：" + lastIndex);


    }

    /**
     * LinkList独有方法
     * addFirst()   返回值：void
     * 作用：将指定元素添加到链表头部
     * addLast()    返回值：void
     * 作用：将指定元素添加到链表尾部
     * removeFirst()
     * removeLast()
     */
    @Test
    public void testAR() {
        //创建集合--双向链接集合
        List<String> list = new LinkedList<>();
        list.add("三吱");
        list.add("龙虎斗");
        list.add("螺狮粉");
        list.add("庵汤");
        //LinkedList独有方法
        ((LinkedList)list).addFirst("榴莲");
        ((LinkedList)list).addFirst("豆汁");
        System.out.println("双向链表："+list);
        ((LinkedList)list).removeFirst();
        System.out.println("双向链表："+list);
    }
}
